// 判断上三角矩阵（统一在读完全部矩阵后输出结果）
#include <stdio.h>

int is_upper_triangle(int n, int a[n][n]) {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < i; ++j) { // 只检查主对角线下方
            if (a[i][j] != 0) return 0;
        }
    }
    return 1;
}

int main(void) {
    int T;
    if (scanf("%d", &T) != 1) return 0;

    int ans[T]; // 做一个数组最后收藏结果

    for (int t = 0; t < T; ++t) {
        int n;
        if (scanf("%d", &n) != 1) return 0;
        int a[n][n];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                scanf("%d ", &a[i][j]);
            }
        }
        ans[t] = is_upper_triangle(n, a);
    }

    // 统一输出
    for (int t = 0; t < T; ++t) {
        printf("%s\n", ans[t] ? "YES" : "NO");//在 C 语言里，条件判断把“0”当作假，把“非 0”当作真。
                                                 

    return 0;
}